LLM Infra 接口功能调研
调研时间2024.10.8
1. chat接口
1.1 输入
openai: https://platform.openai.com/docs/api-reference/chat/create
vllm: https://docs.vllm.ai/en/latest/serving/openai_compatible_server.html
OpenAI Chat 参数名称 | 参数含义 | VLLM(是否支持) | Moffett Tuili |
---|---|---|---|
messages | 包含到目前为止对话的消息列表。根据您使用的模型,支持不同类型的消息(模态),如文本、图像和音频。 | ✅ | 文本 |
model | 要使用的模型的ID。详见模型端点兼容性表,了解哪些模型适用于Chat API。 | ✅ | ✅ |
store | 是否存储此聊天完成请求的输出,以用于我们的模型蒸馏或评估产品。默认为 false 。 |
❌ | ❌ |
metadata | 开发者定义的标签和值,用于在仪表板中过滤完成结果。 | ❌ | ❌ |
frequency_penalty | 介于 -2.0 和 2.0 之间的数字。正值会根据新令牌在文本中出现的频率对其进行惩罚,降低模型逐字重复同一行的可能性。 |
✅ | server start |
logit_bias | 修改指定令牌在完成中出现的可能性。接受一个JSON对象,将令牌(由其标记器中的令牌ID指定)映射到 -100 到 100 之间的偏差值。 |
✅ | ❌ |
logprobs | 是否返回输出令牌的对数概率。如果为 true ,将在消息内容中返回每个输出令牌的对数概率。默认值为 false 。 |
✅ | ❌ |
top_logprobs | 指定在每个令牌位置返回的最可能的令牌数量及其关联的对数概率。必须将 logprobs 设置为 true 才能使用此参数。 |
✅ prompt_logprobs | ❌ |
max_tokens | 已弃用。聊天完成中可生成的最大令牌数。建议使用 max_completion_tokens 替代,且与 o1 系列模型不兼容。 | ❌ | ❌ |
max_completion_tokens | 为完成生成的令牌设定上限,包括可见的输出令牌和推理令牌。 | ✅max_tokens | server start |
n | 为每个输入消息生成的聊天完成选项数量。默认值为 1 。 |
✅ | ❌ |
presence_penalty | 介于 -2.0 和 2.0 之间的数字。正值会根据新令牌是否出现在文本中来惩罚它们,增加模型讨论新主题的可能性。 |
✅ | server start |
response_format | 指定模型必须输出的格式的对象。可用于启用结构化输出,确保模型匹配您提供的 JSON 架构。 | ❌ | ❌ |
seed | 该功能处于 Beta 阶段。如果指定,我们的系统将尽最大努力进行确定性采样,使得具有相同种子和参数的重复请求应返回相同的结果。 | ✅ | ❌ |
service_tier | 指定用于处理请求的延迟等级。对于订阅了规模等级服务的客户,此参数相关。 | ❌ | server start |
stop | 最多可指定 4 个序列,API 在生成这些序列时将停止生成进一步的令牌。 | ✅ | |
stream | 如果设置为 true ,将以类似于 ChatGPT 的方式发送部分消息增量。默认值为 false 。 |
✅ | ✅ |
stream_options | 流响应的选项。仅在设置 stream: true 时使用此参数。 |
默认为:true | 默认为:true |
temperature | 使用的采样温度,介于 0 和 2 之间。较高的值如 0.8 会使输出更随机,而较低的值如 0.2 会使其更集中和确定性。默认值为 1 。 |
✅ | server start |
top_p | 另一种采样方法,称为核采样,模型考虑具有累积概率质量为 top_p 的令牌结果。我们通常建议修改此值或 temperature ,但不同时修改两者。默认值为 1 。 |
✅ | ❌ |
tools | 模型可能调用的工具列表。目前,仅支持函数作为工具。用于提供模型可能为其生成 JSON 输入的函数列表。最多支持 128 个函数。 | ❌ | ❌ |
tool_choice | 控制模型调用的工具(如果有)。none 表示模型不会调用任何工具,auto 表示模型可以选择生成消息或调用一个或多个工具。 |
❌ | ❌ |
parallel_tool_calls | 是否在使用工具期间启用并行函数调用。默认值为 true 。 |
❌ | ❌ |
user | 唯一标识您的终端用户的标识符,这有助于 OpenAI 监控和检测滥用。 | ❌ | ❌ |
function_call | 已弃用,建议使用 tool_choice 代替。 | ❌ | ❌ |
functions | 已弃用,建议使用 tools 代替。 | ❌ | ❌ |
VLLM Chat补充参数 | 参数含义 | Moffett Tuili |
---|---|---|
best_of | 从提示中生成的输出序列数量。从这些 best_of 序列中,返回前 n 个序列。best_of 必须大于或等于 n。当 use_beam_search 为 True 时,这被视为束搜索的宽度。默认情况下,best_of 设置为 n。 | ❌ |
repetition_penalty | 根据新令牌是否出现在提示和已生成文本中来对其进行惩罚的浮点数。值 > 1 鼓励模型使用新令牌,值 < 1 鼓励模型重复令牌。 | server start |
min_p | 相对于最可能令牌的概率,表示要考虑的令牌的最小概率的浮点数。必须在 [0, 1] 之间。设置为 0 以禁用此功能。 | ❌ |
stop_token_ids | 当生成这些令牌时停止生成的令牌列表。除非停止令牌是特殊令牌,否则返回的输出将包含停止令牌。 | ❌ |
include_stop_str_in_output | 是否在输出文本中包含停止字符串。默认值为 False。 | ❌ |
ignore_eos | 是否忽略 EOS(结束符)令牌,并在生成 EOS 令牌后继续生成。 | ❌ |
min_tokens | 在可以生成 EOS 或 stop_token_ids 之前,每个输出序列要生成的最小令牌数。 | ❌ |
detokenize | 是否对输出进行解码。默认值为 True。 | ❌ |
skip_special_tokens | 是否跳过输出中的特殊令牌。 | ❌ |
spaces_between_special_tokens | 是否在输出中的特殊令牌之间添加空格。默认值为 True。 | ❌ |
logits_processors | 根据先前生成的令牌(可选地以提示令牌作为第一个参数)修改 logits 的函数列表。 | ❌ |
truncate_prompt_tokens | 如果设置为整数 k,将只使用提示中的最后 k 个令牌(即左截断)。默认值为 None(即不截断)。 | ❌ |
guided_decoding | 如果提供,引擎将根据这些参数构建一个引导解码的 logits 处理器。默认值为 None。 | ❌ |
allowed_token_ids | 如果提供,引擎将构建一个 logits 处理器,只保留给定令牌 ID 的分数。默认值为 None。 | ❌ |
1.2 输出
1.2.1 非流式输出的回复体
openai: https://platform.openai.com/docs/api-reference/chat/object
参数名 | 解释 | Moffett Tuili |
---|---|---|
id | 一个唯一的聊天完成标识符。 | ✅ |
choices | 聊天完成选项的列表。如果 n 大于 1,可能会有多个选项。 | ✅ |
choices[].finish_reason | 模型停止生成令牌的原因。如果模型达到自然停止点或提供的停止序列,则为 "stop";如果达到请求中指定的最大令牌数,则为 "length";如果由于内容过滤器的标记而省略了内容,则为 "content_filter";如果模型调用了工具,则为 "tool_calls";如果模型调用了函数(已弃用),则为 "function_call"。 | ✅ |
choices[].index | 选项在选项列表中的索引。 | ✅ |
choices[].message | 模型生成的聊天完成消息。 | ✅ |
choices[].message.content | 消息的内容,字符串或 null。 | ✅ |
choices[].message.refusal | 模型生成的拒绝消息,字符串或 null。 | |
choices[].message.tool_calls | 模型生成的工具调用列表,例如函数调用。 | |
choices[].message.tool_calls[].id | 工具调用的 ID。 | |
choices[].message.tool_calls[].type | 工具的类型。目前仅支持 "function"。 | |
choices[].message.tool_calls[].function | 模型调用的函数。 | |
choices[].message.role | 此消息作者的角色。 | ✅ |
choices[].message.function_call (已弃用) | 已弃用,被 tool_calls 替代。模型生成的应调用的函数的名称和参数。 |
|
choices[].message.function_call.name | 要调用的函数的名称。 | |
choices[].message.function_call.arguments | 以 JSON 格式生成的调用函数的参数。请注意,模型并不总是生成有效的 JSON,可能会幻觉出您的函数架构中未定义的参数。在调用函数之前,请在代码中验证参数。 | |
choices[].logprobs | 选项的对数概率信息,可能为对象或 null。 | |
choices[].logprobs.content | 带有对数概率信息的消息内容令牌列表,可能为数组或 null。 | |
choices[].logprobs.content[].token | 令牌。 | |
choices[].logprobs.content[].logprob | 该令牌的对数概率,如果它在前 20 个最可能的令牌中。否则,使用值 -9999.0 表示该令牌非常不可能。 | |
choices[].logprobs.content[].bytes | 表示令牌的 UTF-8 字节表示形式的整数列表。在字符由多个令牌表示且必须组合其字节表示形式以生成正确的文本表示形式的情况下非常有用。如果令牌没有字节表示形式,则可能为 null。 | |
choices[].logprobs.refusal | 带有对数概率信息的消息拒绝令牌列表,可能为数组或 null。 | |
choices[].logprobs.refusal[].token | 令牌。 | |
choices[].logprobs.refusal[].logprob | 该令牌的对数概率,如果它在前 20 个最可能的令牌中。否则,使用值 -9999.0 表示该令牌非常不可能。 | |
choices[].logprobs.refusal[].bytes | 表示令牌的 UTF-8 字节表示形式的整数列表。在字符由多个令牌表示且必须组合其字节表示形式以生成正确的文本表示形式的情况下非常有用。如果令牌没有字节表示形式,则可能为 null。 | |
choices[].logprobs.top_logprobs | 在此令牌位置最可能的令牌及其对数概率的列表。在极少数情况下,返回的 top_logprobs 可能少于请求的数量。 |
|
choices[].logprobs.top_logprobs[].token | 令牌。 | |
choices[].logprobs.top_logprobs[].logprob | 该令牌的对数概率,如果它在前 20 个最可能的令牌中。否则,使用值 -9999.0 表示该令牌非常不可能。 | |
choices[].logprobs.top_logprobs[].bytes | 表示令牌的 UTF-8 字节表示形式的整数列表。在字符由多个令牌表示且必须组合其字节表示形式以生成正确的文本表示形式的情况下非常有用。如果令牌没有字节表示形式,则可能为 null。 | |
created | 聊天完成创建时的 Unix 时间戳(以秒为单位)。 | ✅ |
model | 用于聊天完成的模型。 | ✅ |
service_tier | 用于处理请求的服务层。如果在请求中指定了 service_tier 参数,则仅包含此字段。可能为字符串或 null。 |
❌ |
system_fingerprint | 表示模型运行的后端配置的指纹。可与 seed 请求参数一起使用,以了解可能影响确定性的后端更改何时发生。 |
✅ |
object | 对象类型,始终为 chat.completion 。 |
✅ |
usage | 完成请求的使用统计信息。 | ✅ |
usage.completion_tokens | 生成的完成内容中的令牌数量。 | ✅ |
usage.prompt_tokens | 提示中的令牌数量。 | ✅ |
usage.total_tokens | 请求中使用的令牌总数(提示 + 完成)。 | ✅ |
usage.completion_tokens_details | 完成内容中使用的令牌的详细分解。 | |
usage.prompt_tokens_details | 提示中使用的令牌的详细分解。 | |
usage.prompt_tokens_details.audio_tokens | 提示中存在的音频输入令牌。 | |
usage.prompt_tokens_details.cached_tokens | 提示中存在的缓存令牌。 |
1.2.2 流式输出的回复体
openai: https://platform.openai.com/docs/api-reference/chat/object
参数名 | 解释 | Moffett Tuili |
---|---|---|
id | 一个唯一的聊天完成标识符。每个块都有相同的 ID。 | ✅ |
choices | 聊天完成选项的列表。如果 n 大于 1,则可能包含多个元素。如果您在请求中设置了 stream_options: {"include_usage": true} ,则对于最后一个块,该列表可能为空。 |
✅ |
choices[].delta | 流式模型响应生成的聊天完成增量。 | ✅ |
choices[].delta.content | 块消息的内容。 | ✅ |
choices[].delta.function_call(已弃用) | 已弃用并被 tool_calls 取代。模型生成的应该被调用的函数的名称和参数。 |
|
choices[].delta.function_call.name | 要调用的函数名称。 | |
choices[].delta.function_call.arguments | 调用函数的参数,由模型以 JSON 格式生成。请注意,模型并不总是生成有效的 JSON,可能会产生未在您的函数架构中定义的参数。在调用函数之前,请在代码中验证参数。 | |
choices[].delta.tool_calls | 工具调用的数组。 | |
choices[].delta.tool_calls[].index | 工具调用的索引。 | |
choices[].delta.tool_calls[].id | 工具调用的 ID。 | |
choices[].delta.tool_calls[].type | 工具的类型。目前,仅支持 "function" 。 |
|
choices[].delta.tool_calls[].function | 工具调用的函数信息。 | |
choices[].delta.tool_calls[].function.name | 要调用的函数名称。 | |
choices[].delta.tool_calls[].function.arguments | 调用函数的参数,由模型以 JSON 格式生成。请注意,模型并不总是生成有效的 JSON,可能会产生未在您的函数架构中定义的参数。在调用函数之前,请在代码中验证参数。 | |
choices[].delta.role | 此消息的作者角色。 | ✅ |
choices[].delta.refusal | 模型生成的拒绝消息。 | |
choices[].logprobs | 选项的对数概率信息。可能为对象或 null 。 |
|
choices[].logprobs.content | 带有对数概率信息的消息内容令牌列表。可能为数组或 null 。 |
|
choices[].logprobs.content[].token | 令牌。 | |
choices[].logprobs.content[].logprob | 该令牌的对数概率,如果它在前 20 个最可能的令牌中;否则,使用值 -9999.0 表示该令牌非常不可能。 |
|
choices[].logprobs.content[].bytes | 表示令牌的 UTF-8 字节表示形式的整数列表。在字符由多个令牌表示且需要组合其字节表示形式以生成正确文本的情况下非常有用。如果令牌没有字节表示形式,则可能为 null 。 |
|
choices[].logprobs.top_logprobs | 在此令牌位置最可能的令牌及其对数概率的列表。在极少数情况下,返回的 top_logprobs 可能少于请求的数量。 |
|
choices[].logprobs.top_logprobs[].token | 令牌。 | |
choices[].logprobs.top_logprobs[].logprob | 该令牌的对数概率。 | |
choices[].logprobs.top_logprobs[].bytes | 表示令牌的 UTF-8 字节表示形式的整数列表。 | |
choices[].logprobs.refusal | 带有对数概率信息的消息拒绝令牌列表。可能为数组或 null 。 |
|
choices[].logprobs.refusal[].token | 令牌。 | |
choices[].logprobs.refusal[].logprob | 该令牌的对数概率。 | |
choices[].logprobs.refusal[].bytes | 表示令牌的 UTF-8 字节表示形式的整数列表。 | |
choices[].logprobs.refusal[].top_logprobs | 在此令牌位置最可能的令牌及其对数概率的列表。 | |
choices[].logprobs.refusal[].top_logprobs[].token | 令牌。 | |
choices[].logprobs.refusal[].top_logprobs[].logprob | 该令牌的对数概率。 | |
choices[].logprobs.refusal[].top_logprobs[].bytes | 表示令牌的 UTF-8 字节表示形式的整数列表。 | |
choices[].finish_reason | 模型停止生成令牌的原因。如果模型达到自然停止点或提供的停止序列,则为 "stop" ;如果达到请求中指定的最大令牌数,则为 "length" ;如果由于内容过滤器的标记而省略了内容,则为 "content_filter" ;如果模型调用了工具,则为 "tool_calls" ;如果模型调用了函数(已弃用),则为 "function_call" 。 |
|
choices[].index | 选项在选项列表中的索引。 | ✅ |
created | 聊天完成创建时的 Unix 时间戳(以秒为单位)。每个块都有相同的时间戳。 | ✅ |
model | 用于生成完成的模型。 | ✅ |
service_tier | 用于处理请求的服务层。如果在请求中指定了 service_tier 参数,则仅包含此字段。 |
❌ |
system_fingerprint | 此指纹表示模型运行的后端配置。可与 seed 请求参数一起使用,以了解可能影响确定性的后端更改何时发生。 |
|
object | 对象类型,始终为 chat.completion.chunk 。 |
✅ |
usage | 一个可选字段,仅当您在请求中设置了 stream_options: {"include_usage": true} 时才会出现。当存在时,除最后一个块外,它包含一个 null 值,最后一个块包含整个请求的令牌使用统计信息。 |
✅ |
usage.completion_tokens | 生成的完成内容中的令牌数量。 | ✅ |
usage.prompt_tokens | 提示中的令牌数量。 | ✅ |
usage.total_tokens | 请求中使用的令牌总数(提示 + 完成)。 | ✅ |
2. embedding 接口
2.1 输入\
openai: https://platform.openai.com/docs/api-reference/embeddings/create
vllm: https://docs.vllm.ai/en/latest/getting_started/examples/openai_embedding_client.html
参数名 | 解释 | VLLM |
---|---|---|
input | 必需。 要嵌入的输入文本,编码为字符串或令牌数组。要在单个请求中嵌入多个输入,请传递字符串数组或令牌数组。输入不得超过模型的最大输入令牌数(对于 text-embedding-ada-002 为 8192 个令牌),不能是空字符串,且任何数组必须不超过 2048 维。可参考用于计算令牌数的示例 Python 代码。 |
✅ |
input 类型 | 可能的类型: | ✅ |
- string | 将被转换为嵌入的字符串。 | |
- array | 将被转换为嵌入的字符串数组。 | |
- array | 将被转换为嵌入的整数数组。 | |
- array | 包含整数的数组数组,将被转换为嵌入。 | |
model | 必需。 要使用的模型的 ID。您可以使用 List models API 查看所有可用模型,或参阅我们的 模型概览 以获取它们的描述。 |
✅ |
encoding_format | 可选,默认值为 float 。 返回嵌入的格式。可以是 float 或 base64 。 |
|
dimensions | 可选。 结果输出嵌入应具有的维数。仅在 text-embedding-3 及更高版本的模型中支持。 |
|
user | 可选。 表示您的最终用户的唯一标识符,可以帮助 OpenAI 监控和检测滥用。 了解更多。 |
2.2 输出
openai: https://platform.openai.com/docs/api-reference/embeddings/object
参数名 | 解释 | VLLM |
---|---|---|
index | 嵌入在嵌入列表中的索引。 | ✅ |
embedding | 嵌入向量,即浮点数列表。向量的长度取决于模型,如嵌入指南中所述。 | ✅ |
object | 对象类型,始终为 "embedding"。 | ✅ |
3. 视觉生成接口
vllm 不支持
3.1 文生图输入
openai: https://platform.openai.com/docs/api-reference/images/create
参数名 | 解释 |
---|---|
prompt | 必需。所需图像的文本描述。对于 dall-e-2,最大长度为 1000 个字符;对于 dall-e-3,最大长度为 4000 个字符。 |
model | 可选。默认为 dall-e-2。用于图像生成的模型。 |
n | 可选。默认为 1。要生成的图像数量。必须在 1 到 10 之间。对于 dall-e-3,仅支持 n=1。 |
quality | 可选。默认为 standard。将要生成的图像质量。hd 会创建具有更精细细节和更高一致性的图像。此参数仅支持 dall-e-3。 |
response_format | 可选。默认为 url。生成的图像返回的格式。必须是 url 或 b64_json 之一。生成后的 URL 仅在 60 分钟内有效。 |
size | 可选。默认为 1024x1024。生成图像的尺寸。对于 dall-e-2,必须是 256x256、512x512 或 1024x1024 之一。对于 dall-e-3 模型,必须是 1024x1024、1792x1024 或 1024x1792 之一。 |
style | 可选。默认为 vivid。生成图像的风格。必须是 vivid 或 natural 之一。vivid 使模型倾向于生成超真实和戏剧性的图像,natural 使模型生成更自然、较少超真实感的图像。此参数仅支持 dall-e-3。 |
user | 可选。表示您的终端用户的唯一标识符,可以帮助 OpenAI 监控和检测滥用行为。了解更多。 |
Returns | 返回一个图像对象的列表。 |
3.2 图片编辑输入
openai: https://platform.openai.com/docs/api-reference/images/createEdit
参数名 | 解释 |
---|---|
image | 必需,类型为文件。要编辑的图像。必须是有效的 PNG 文件,小于 4MB,并且是正方形。如果未提供 mask ,则图像必须具有透明度,将用于作为掩码。 |
prompt | 必需,类型为字符串。所需图像的文本描述。最大长度为 1000 个字符。 |
mask | 可选,类型为文件。一个额外的图像,其完全透明的区域(例如 alpha 为零的地方)指示应编辑图像的位置。必须是有效的 PNG 文件,小于 4MB,且与 image 具有相同的尺寸。 |
model | 可选,类型为字符串。默认值为 dall-e-2 。用于图像生成的模型。目前仅支持 dall-e-2 。 |
n | 可选,类型为整数或 null。默认值为 1 。要生成的图像数量。必须在 1 到 10 之间。 |
size | 可选,类型为字符串或 null。默认值为 1024x1024 。生成的图像大小。必须是 256x256 、512x512 或 1024x1024 之一。 |
response_format | 可选,类型为字符串或 null。默认值为 url 。返回生成的图像格式。必须是 url 或 b64_json 之一。生成图像后的 URL 仅在 60 分钟内有效。 |
user | 可选,类型为字符串。表示您的最终用户的唯一标识符,可帮助 OpenAI 监控和检测滥用。 了解更多。 |
3.3 图片变化输入
openai: https://platform.openai.com/docs/api-reference/images/createVariation
参数名 | 解释 |
---|---|
image | **必填。**用于生成变体的基础图像。必须是有效的 PNG 文件,小于 4MB,并且是正方形。 |
model | **可选。**默认值为 dall-e-2 。用于图像生成的模型。目前仅支持 dall-e-2 。 |
n | **可选。**默认值为 1。要生成的图像数量。必须在 1 到 10 之间。对于 dall-e-3 ,仅支持 n=1 。 |
response_format | **可选。**默认值为 url 。生成的图像返回的格式。必须是 url 或 b64_json 之一。生成图像后的 60 分钟内,URL 才有效。 |
size | **可选。**默认值为 1024x1024 。生成图像的大小。必须是 256x256 、512x512 或 1024x1024 之一。 |
user | **可选。**表示您的终端用户的唯一标识符,有助于 OpenAI 监控和检测滥用行为。 了解更多。 |
3.4 输出
openai: https://platform.openai.com/docs/api-reference/images/object
参数名 | 解释 |
---|---|
b64_json | 如果 response_format 是 b64_json ,则为生成的图像的 base64 编码的 JSON。 |
url | 如果 response_format 是 url (默认值),则为生成的图像的 URL。 |
revised_prompt | 如果对提示进行了任何修改,则为用于生成图像的提示。 |
chat接口功能分析:
- chat 接口 支持修改模型参数,而不是模型启动时锁死,参数有:
- frequency_penalty
- max_completion_tokens
- presence_penalty
- temperature
- top_p
- logit_bias 修改分布偏差
- 功能参数:
- logprobs bankend+tuili层面
- top_logprobs bankend+tuili层面
- n bankend+tuili层面
- response_format 实现方式待定
- seed 实现方式待定
- stop tuili层面
- tools bankend+tuili+llm层面 待定
- tool_choice bankend+tuili+llm层面 待定
- 根据model name 框架内加载